﻿//+-------------------------------------------------------------------------------------------------------------------------------------------------------
//
//Description: Interaction logic for App.xaml
//Author: Aravind Ramarathinam (aravr@microsoft.com)
//
//Copyright © Microsoft Corporation
//Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. 
//You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 
//
//THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, 
//INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. 
//See the Apache Version 2.0 License for specific language governing permissions and limitations under the License.
// 
//--------------------------------------------------------------------------------------------------------------------------------------------------------



using System;
using System.Collections.ObjectModel;
using System.IO;
using System.Runtime.Serialization;
using System.Windows;
using VmroleAuthor.Helpers;
using VmroleAuthor.ViewModels;
using VmroleAuthor.Views;

namespace VmroleAuthor
{
    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App : Application
    {
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);

            if (e.Args.Length >= 2)
            {
                // UI less test mode
                MainWindow hiddenWindow = new MainWindow();
                hiddenWindow.Visibility = Visibility.Hidden;
                hiddenWindow.ShowInTaskbar = false;

                OpenFileWindow hiddenOpenFileWindow = new OpenFileWindow();
                hiddenOpenFileWindow.Visibility = Visibility.Hidden;
                hiddenOpenFileWindow.FileLocation.Text = e.Args[0];
                hiddenOpenFileWindow.WorkingDir.Text = OpenFileWindow.GetWorkingDirectoryName(e.Args[0]);
                hiddenOpenFileWindow.OkButton_Click(null, null);

                if (hiddenOpenFileWindow.DataValid)
                {
                    if (hiddenOpenFileWindow.CloudServiceManagerFileType == CloudServiceManagerFileType.ResourceExtensionPackage)
                    {
                        hiddenWindow.OpenResourceExtension(hiddenOpenFileWindow.ResourceExtensionStorageInfo);
                    }
                    else if ((hiddenOpenFileWindow.CloudServiceManagerFileType == CloudServiceManagerFileType.ResourceDefinitionPackage) ||
                        (hiddenOpenFileWindow.CloudServiceManagerFileType == CloudServiceManagerFileType.ResourceDefinition))
                    {
                        hiddenWindow.OpenResourceDefinition(hiddenOpenFileWindow.ResourceDefinitionStorageInfo);
                    }

                }

                //Run Validation
                hiddenWindow.DefinitionViewModel.ValidateAll();

                DataContractSerializer s = new DataContractSerializer(typeof(ObservableCollection<CloudServiceModelValidationResult>), new[] { typeof(CloudServiceModelValidationResult), typeof(ValidationCategory) });
                using (FileStream fs = File.Open(e.Args[1], FileMode.Create))
                {
                    s.WriteObject(fs, hiddenWindow.DefinitionViewModel.ValidationResults);
                }

                hiddenWindow.Close();

            }
            else
            {
                new MainWindow().ShowDialog();
            }
            this.Shutdown();
        }

    }
}
